home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / perl5000.zip / perl5000 / ext / GDBM_File / GDBM_File.xs < prev    next >
Encoding:
Text File  |  1994-10-07  |  3.4 KB  |  219 lines

  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4.  
  5. #include <gdbm.h>
  6. #include <fcntl.h>
  7.  
  8. typedef GDBM_FILE GDBM_File;
  9.  
  10. #define GDBM_BLOCKSIZE 0 /* gdbm defaults to stat blocksize */
  11. #define gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func) \
  12.     gdbm_open(name, GDBM_BLOCKSIZE, read_write, mode, fatal_func)
  13.  
  14. #define gdbm_FETCH(db,key)            gdbm_fetch(db,key)
  15. #define gdbm_STORE(db,key,value,flags)        gdbm_store(db,key,value,flags)
  16. #define gdbm_DELETE(db,key)            gdbm_delete(db,key)
  17. #define gdbm_FIRSTKEY(db)            gdbm_firstkey(db)
  18. #define gdbm_NEXTKEY(db,key)            gdbm_nextkey(db,key)
  19.  
  20. typedef datum gdatum;
  21.  
  22. typedef void (*FATALFUNC)();
  23.  
  24. static int
  25. not_here(s)
  26. char *s;
  27. {
  28.     croak("GDBM_File::%s not implemented on this architecture", s);
  29.     return -1;
  30. }
  31.  
  32. static double
  33. constant(name, arg)
  34. char *name;
  35. int arg;
  36. {
  37.     errno = 0;
  38.     switch (*name) {
  39.     case 'A':
  40.     break;
  41.     case 'B':
  42.     break;
  43.     case 'C':
  44.     break;
  45.     case 'D':
  46.     break;
  47.     case 'E':
  48.     break;
  49.     case 'F':
  50.     break;
  51.     case 'G':
  52.     if (strEQ(name, "GDBM_CACHESIZE"))
  53. #ifdef GDBM_CACHESIZE
  54.         return GDBM_CACHESIZE;
  55. #else
  56.         goto not_there;
  57. #endif
  58.     if (strEQ(name, "GDBM_FAST"))
  59. #ifdef GDBM_FAST
  60.         return GDBM_FAST;
  61. #else
  62.         goto not_there;
  63. #endif
  64.     if (strEQ(name, "GDBM_FASTMODE"))
  65. #ifdef GDBM_FASTMODE
  66.         return GDBM_FASTMODE;
  67. #else
  68.         goto not_there;
  69. #endif
  70.     if (strEQ(name, "GDBM_INSERT"))
  71. #ifdef GDBM_INSERT
  72.         return GDBM_INSERT;
  73. #else
  74.         goto not_there;
  75. #endif
  76.     if (strEQ(name, "GDBM_NEWDB"))
  77. #ifdef GDBM_NEWDB
  78.         return GDBM_NEWDB;
  79. #else
  80.         goto not_there;
  81. #endif
  82.     if (strEQ(name, "GDBM_READER"))
  83. #ifdef GDBM_READER
  84.         return GDBM_READER;
  85. #else
  86.         goto not_there;
  87. #endif
  88.     if (strEQ(name, "GDBM_REPLACE"))
  89. #ifdef GDBM_REPLACE
  90.         return GDBM_REPLACE;
  91. #else
  92.         goto not_there;
  93. #endif
  94.     if (strEQ(name, "GDBM_WRCREAT"))
  95. #ifdef GDBM_WRCREAT
  96.         return GDBM_WRCREAT;
  97. #else
  98.         goto not_there;
  99. #endif
  100.     if (strEQ(name, "GDBM_WRITER"))
  101. #ifdef GDBM_WRITER
  102.         return GDBM_WRITER;
  103. #else
  104.         goto not_there;
  105. #endif
  106.     break;
  107.     case 'H':
  108.     break;
  109.     case 'I':
  110.     break;
  111.     case 'J':
  112.     break;
  113.     case 'K':
  114.     break;
  115.     case 'L':
  116.     break;
  117.     case 'M':
  118.     break;
  119.     case 'N':
  120.     break;
  121.     case 'O':
  122.     break;
  123.     case 'P':
  124.     break;
  125.     case 'Q':
  126.     break;
  127.     case 'R':
  128.     break;
  129.     case 'S':
  130.     break;
  131.     case 'T':
  132.     break;
  133.     case 'U':
  134.     break;
  135.     case 'V':
  136.     break;
  137.     case 'W':
  138.     break;
  139.     case 'X':
  140.     break;
  141.     case 'Y':
  142.     break;
  143.     case 'Z':
  144.     break;
  145.     }
  146.     errno = EINVAL;
  147.     return 0;
  148.  
  149. not_there:
  150.     errno = ENOENT;
  151.     return 0;
  152. }
  153.  
  154. MODULE = GDBM_File    PACKAGE = GDBM_File    PREFIX = gdbm_
  155.  
  156. double
  157. constant(name,arg)
  158.     char *        name
  159.     int        arg
  160.  
  161.  
  162. GDBM_File
  163. gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak)
  164.     char *        dbtype
  165.     char *        name
  166.     int        read_write
  167.     int        mode
  168.     FATALFUNC    fatal_func
  169.  
  170. void
  171. gdbm_close(db)
  172.     GDBM_File    db
  173.     CLEANUP:
  174.  
  175. void
  176. gdbm_DESTROY(db)
  177.     GDBM_File    db
  178.     CODE:
  179.     gdbm_close(db);
  180.  
  181. gdatum
  182. gdbm_FETCH(db, key)
  183.     GDBM_File    db
  184.     datum        key
  185.  
  186. int
  187. gdbm_STORE(db, key, value, flags = GDBM_REPLACE)
  188.     GDBM_File    db
  189.     datum        key
  190.     datum        value
  191.     int        flags
  192.     CLEANUP:
  193.     if (RETVAL) {
  194.         if (RETVAL < 0 && errno == EPERM)
  195.         croak("No write permission to gdbm file");
  196.         warn("gdbm store returned %d, errno %d, key \"%.*s\"",
  197.             RETVAL,errno,key.dsize,key.dptr);
  198.         /* gdbm_clearerr(db); */
  199.     }
  200.  
  201. int
  202. gdbm_DELETE(db, key)
  203.     GDBM_File    db
  204.     datum        key
  205.  
  206. gdatum
  207. gdbm_FIRSTKEY(db)
  208.     GDBM_File    db
  209.  
  210. gdatum
  211. gdbm_NEXTKEY(db, key)
  212.     GDBM_File    db
  213.     datum        key
  214.  
  215. int
  216. gdbm_reorganize(db)
  217.     GDBM_File    db
  218.  
  219.